{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2447e327-b643-41a7-b5a6-dc77ffa16db4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\"泰坦尼克号\"乘客信息数据集\n",
      "    pclass                                             name     sex      age  \\\n",
      "0      1st                     Allen, Miss Elisabeth Walton  female  29.0000   \n",
      "1      1st                      Allison, Miss Helen Loraine  female   2.0000   \n",
      "2      1st              Allison, Mr Hudson Joshua Creighton    male  30.0000   \n",
      "3      1st  Allison, Mrs Hudson J.C. (Bessie Waldo Daniels)  female  25.0000   \n",
      "4      1st                    Allison, Master Hudson Trevor    male   0.9167   \n",
      "..     ...                                              ...     ...      ...   \n",
      "834    3rd                                 Guest, Mr Robert    male      NaN   \n",
      "835    3rd                     Gustafsson, Mr Alfred Ossian    male  20.0000   \n",
      "836    3rd                    Gustafsson, Mr Anders Vilhelm    male  37.0000   \n",
      "837    3rd                      Gustafsson, Mr Johan Birger    male  28.0000   \n",
      "838    3rd                       Gustafsson, Mr Karl Gideon    male  19.0000   \n",
      "\n",
      "        embarked      ticket room  survived  \n",
      "0    Southampton  24160 L221  B-5         1  \n",
      "1    Southampton         NaN  C26         0  \n",
      "2    Southampton         NaN  C26         0  \n",
      "3    Southampton         NaN  C26         0  \n",
      "4    Southampton         NaN  C22         1  \n",
      "..           ...         ...  ...       ...  \n",
      "834  Southampton         NaN  NaN         0  \n",
      "835  Southampton         NaN  NaN         0  \n",
      "836  Southampton         NaN  NaN         0  \n",
      "837  Southampton         NaN  NaN         0  \n",
      "838  Southampton         NaN  NaN         0  \n",
      "\n",
      "[839 rows x 8 columns]\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 839 entries, 0 to 838\n",
      "Data columns (total 8 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   pclass    839 non-null    object \n",
      " 1   name      839 non-null    object \n",
      " 2   sex       839 non-null    object \n",
      " 3   age       633 non-null    float64\n",
      " 4   embarked  821 non-null    object \n",
      " 5   ticket    69 non-null     object \n",
      " 6   room      77 non-null     object \n",
      " 7   survived  839 non-null    int64  \n",
      "dtypes: float64(1), int64(1), object(6)\n",
      "memory usage: 52.6+ KB\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "dataset=pd.read_csv('item8-ss-data-y.csv')\n",
    "print('\"泰坦尼克号\"乘客信息数据集')\n",
    "print(dataset)\n",
    "dataset.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a0d91fdd-d340-44f9-a012-7667c341fd86",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     pclass  sex        age  embarked  survived\n",
      "0         0    0  29.000000         0         1\n",
      "1         0    0   2.000000         0         0\n",
      "2         0    1  30.000000         0         0\n",
      "3         0    0  25.000000         0         0\n",
      "4         0    1   0.916700         0         1\n",
      "..      ...  ...        ...       ...       ...\n",
      "834       2    1  31.194181         0         0\n",
      "835       2    1  20.000000         0         0\n",
      "836       2    1  37.000000         0         0\n",
      "837       2    1  28.000000         0         0\n",
      "838       2    1  19.000000         0         0\n",
      "\n",
      "[821 rows x 5 columns]\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 821 entries, 0 to 838\n",
      "Data columns (total 5 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   pclass    821 non-null    int64  \n",
      " 1   sex       821 non-null    int64  \n",
      " 2   age       821 non-null    float64\n",
      " 3   embarked  821 non-null    int64  \n",
      " 4   survived  821 non-null    int64  \n",
      "dtypes: float64(1), int64(4)\n",
      "memory usage: 38.5 KB\n"
     ]
    }
   ],
   "source": [
    "dataset.drop(['name','ticket','room'],inplace=True,axis=1)\n",
    "dataset['age']=dataset['age'].fillna(dataset['age'].mean())\n",
    "dataset=dataset.dropna()\n",
    "labels=dataset['pclass'].unique().tolist()\n",
    "dataset['pclass']=dataset['pclass'].apply(lambda x: labels.index(x))\n",
    "dataset['sex']=(dataset['sex']=='male').astype(int)\n",
    "labels=dataset['embarked'].unique().tolist()\n",
    "dataset['embarked']=dataset['embarked'].apply(lambda x:labels.index(x))\n",
    "print(dataset)\n",
    "dataset.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f20409dc-a4b1-4c64-91bf-c00b2f254ee8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最大预测准确率为:0.824242\n",
      "预测准确率最大的模型对应的参数值为:51f\n"
     ]
    },
    {
     "data": {
      "image/png": "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vsLpfsPxXquqquRyuZSRkdFjK66rEVY9QREREVfcdHUgEhMTh/0Poh/3OnyF0/1yr8NXON1vON2rx+MZknulMBoAAIQlQhAAAAhLhKCrEBMTo6effloxMTFWN2XIca/DVzjdL/c6fIXT/XKvgyesCqMBAAD86AkCAABhiRAEAADCEiEIAACEJUIQAAAIS4SgAdq4caOys7MVGxur3Nxc7dmzx+omXbWSkhLdeuutSkhI0JgxY3T33Xfrk08+CThn3rx5crlcAV9/+7d/a1GLr84zzzzT417S0tLM7xuGoWeeeUYZGRkaMWKE7rjjDh0+fNjCFg+c1+vtca8ul0uLFy+W5Ozn+t5772n27NnKyMiQy+XSz3/+84Dv9+c5trS06PHHH1dKSori4+N111136cSJEyG8i/673P22tbXp+9//vm688UbFx8crIyNDc+fO1cmTJwPe44477ujxvO+///4Q38mVXenZ9ufn1inP9kr32tvvr8vl0osvvmie45Tn2p/PmlD93hKCBmDr1q0qKirSk08+qYMHDyo/P18zZ85UVVWV1U27Krt379bixYu1f/9+lZeXq729XQUFBTp//nzAed/4xjdUU1Njfm3fvt2iFl+9G264IeBePv74Y/N7q1ev1tq1a7VhwwYdOHBAaWlp+ru/+ztzDzonOXDgQMB9lpeXS5Luu+8+8xynPtfz589r4sSJ2rBhQ6/f789zLCoq0ttvv6033nhDe/fu1blz5/TNb35THR0dobqNfrvc/TY1Nemjjz7SU089pY8++kjbtm3Tp59+qrvuuqvHuQsXLgx43j/96U9D0fygXOnZSlf+uXXKs73SvV56jzU1NXrppZfkcrl0zz33BJznhOfan8+akP3eGgja5MmTjUWLFgUcu+6664wVK1ZY1KKhUVtba0gydu/ebR576KGHjG9961vWNWoQPf3008bEiRN7/V5nZ6eRlpZmvPDCC+ax5uZmw+PxGD/5yU9C1MKh88QTTxhf/vKXjc7OTsMwhs9zlWS8/fbb5t/78xzr6+uNqKgo44033jDPqa6uNiIiIowdO3aErO0D8df325sPPvjAkGQcO3bMPHb77bcbTzzxxNA2bpD1dq9X+rl16rPtz3P91re+ZUyfPj3gmBOfq2H0/KwJ5e8tPUFBam1tVUVFhQoKCgKOFxQUaN++fRa1amj4fD5J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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.model_selection import train_test_split\n",
    "import matplotlib.pyplot as plt\n",
    "x=dataset.iloc[range(0,821),range(0,4)].values\n",
    "y=dataset.iloc[range(0,821),range(4,5)].values.reshape(1,821)[0]\n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1,test_size=0.2)\n",
    "score=[]\n",
    "for i in range(0,200,10):\n",
    "    model=RandomForestClassifier(random_state=0,n_estimators=i+1)\n",
    "    model=model.fit(x_train,y_train)\n",
    "    pred=model.predict(x_test)\n",
    "    ac=accuracy_score(y_test,pred)\n",
    "    score.append(ac)\n",
    "print('最大预测准确率为:%f'%max(score))\n",
    "n=score.index(max(score))*10+1\n",
    "print('预测准确率最大的模型对应的参数值为:%.of'%n)\n",
    "plt.plot(range(1,201,10),score)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d85c4f2a-59fb-4d82-9d42-2e39616909d4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型评估报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.86      0.83      0.84        93\n",
      "           1       0.79      0.82      0.80        72\n",
      "\n",
      "    accuracy                           0.82       165\n",
      "   macro avg       0.82      0.82      0.82       165\n",
      "weighted avg       0.83      0.82      0.82       165\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "model=RandomForestClassifier(random_state=0,n_estimators=41)\n",
    "model.fit(x_train,y_train)\n",
    "pred=model.predict(x_test)\n",
    "re=classification_report(y_test,pred)\n",
    "print('模型评估报告:')\n",
    "print(re)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "569fa17d-c327-4e1c-93f4-36e7aa0f6de9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "需预测数据\n",
      "   pclass     sex  age     embarked            name  ticket   room\n",
      "0     1st    male   39    Cherbourg           Blank     NaN   A-31\n",
      "1     1st  female   30  Southampton   Miss Caroline     NaN    C-7\n",
      "2     1st  female   58  Southampton  Miss Elizabeth     NaN  C-103\n",
      "3     1st  female   45    Cherbourg           Bowen     NaN    NaN\n",
      "4     1st  female   22  Southampton        Bowerman     NaN    NaN\n",
      "5     2nd    male   34  Southampton      Mr William     NaN    NaN\n",
      "6     2nd  female   32  Southampton     Mrs William     NaN    NaN\n",
      "7     2nd    male   57  Southampton           Ashby     NaN    NaN\n",
      "8     2nd    male   18  Southampton          Bailey     NaN    NaN\n",
      "9     2nd    male   23  Southampton      Baimbrigge     NaN    NaN\n",
      "10    3rd    male   42  Southampton      Mr Anthony     NaN    NaN\n",
      "11    3rd    male   13  Southampton   Master Eugene     NaN    NaN\n",
      "12    3rd    male   16  Southampton    Mr Rossmore      NaN    NaN\n",
      "13    3rd  female   35  Southampton     Mrs Stanton     NaN    NaN\n",
      "14    3rd  female   16  Southampton      Miss Anna      NaN    NaN\n"
     ]
    }
   ],
   "source": [
    "test=pd.read_csv('item8-ss-test-y.csv')\n",
    "print('需预测数据')\n",
    "print(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "61615843-819d-4c87-83f6-15e13b0bf5a8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    pclass  sex  age  embarked            name  ticket   room\n",
      "0        0    1   39         0           Blank     NaN   A-31\n",
      "1        0    0   30         1   Miss Caroline     NaN    C-7\n",
      "2        0    0   58         1  Miss Elizabeth     NaN  C-103\n",
      "3        0    0   45         0           Bowen     NaN    NaN\n",
      "4        0    0   22         1        Bowerman     NaN    NaN\n",
      "5        1    1   34         1      Mr William     NaN    NaN\n",
      "6        1    0   32         1     Mrs William     NaN    NaN\n",
      "7        1    1   57         1           Ashby     NaN    NaN\n",
      "8        1    1   18         1          Bailey     NaN    NaN\n",
      "9        1    1   23         1      Baimbrigge     NaN    NaN\n",
      "10       2    1   42         1      Mr Anthony     NaN    NaN\n",
      "11       2    1   13         1   Master Eugene     NaN    NaN\n",
      "12       2    1   16         1    Mr Rossmore      NaN    NaN\n",
      "13       2    0   35         1     Mrs Stanton     NaN    NaN\n",
      "14       2    0   16         1      Miss Anna      NaN    NaN\n"
     ]
    }
   ],
   "source": [
    "labels=test['pclass'].unique().tolist()\n",
    "test['pclass']=test['pclass'].apply(lambda x:labels.index(x))\n",
    "test['sex']=(test['sex']=='male').astype(int)\n",
    "labels=test['embarked'].unique().tolist()\n",
    "test['embarked']=test['embarked'].apply(lambda x:labels.index(x))\n",
    "print(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bb0fdea7-f90b-4d68-9f85-45da76d534c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Blank不能获救']\n",
      "['Miss Caroline能够获救']\n",
      "['Miss Elizabeth能够获救']\n",
      "['Bowen能够获救']\n",
      "['Bowerman能够获救']\n",
      "['Mr William不能获救']\n",
      "['Mrs William能够获救']\n",
      "['Ashby不能获救']\n",
      "['Bailey不能获救']\n",
      "['Baimbrigge不能获救']\n",
      "['Mr Anthony不能获救']\n",
      "['Master Eugene不能获救']\n",
      "['Mr Rossmore 不能获救']\n",
      "['Mrs Stanton能够获救']\n"
     ]
    }
   ],
   "source": [
    "x_new=test.iloc[range(0,14),range(0,4)].values\n",
    "names=test.iloc[range(0,14),range(4,5)].values\n",
    "pred=model.predict(x_new)\n",
    "for result,name in zip(pred,names):\n",
    "    if result==1:\n",
    "        print(name+\"能够获救\")\n",
    "    else:\n",
    "        print(name+\"不能获救\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bc8c16c5-2329-4e81-90d1-09d61bd1405a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
